package com.spring5.study.pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.lang.Nullable;

public class People {

    //使用@Autowired之后可以省略set方法
    /*使用Autowired我们可以不用编写Set方法了，
    前提是你这个自动装配的属性在I0C (Spring) 容器中存在，
    且符合名字byname!*/

    //如果显示定义了Autowired的required属性为false, 说明这个对象可以为null, 否则不允许为空
    @Autowired(required = false)
    private Cat cat;

/*  @Resource (name = " cat2")
    private Cat cat;

    @Resource和@ Autowired的区别:
        ●都是用来自动装配的，都可以放在属性字段上
        ●@Autowired通过byType的方式实现,而且必须要求这个对象存在!
        ●@Resource 默认通过byname的方式实现，如果找不到名字，则通过byType实现!
          如果两个都找不到的情况下，就报错!

*/


    //如果@Autowired自动装配的环境比较复杂，自动装配无法通过一个注解[@Autowired]完成的时候、
    //我们可以使用@Qualfier(value="xx")去配置@Autowired的使用，指定一个唯一的bean对象注入!
    @Autowired
    @Qualifier(value = "dog222")
    private Dog dog;
    private String name;

    //@Nullable，参数name可以为null
   /* public People(@Nullable String name) {
        this.name = name;
    }*/

    @Override
    public String toString() {
        return "People{" +
                "cat=" + cat +
                ", dog=" + dog +
                ", name='" + name + '\'' +
                '}';
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Cat getCat() {
        return cat;
    }

    public Dog getDog() {
        return dog;
    }

    public String getName() {
        return name;
    }
}
